package com.example.demo.exception;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;

/**
 * 未授权异常 (HTTP 401)
 * 当用户未认证或认证失败时抛出
 */
@ResponseStatus(value = HttpStatus.UNAUTHORIZED)
public class UnauthorizedException extends RuntimeException {

    /**
     * 使用默认错误消息构造异常
     */
    public UnauthorizedException() {
        super("Unauthorized: Authentication required");
    }

    /**
     * 使用自定义错误消息构造异常
     * @param message 自定义错误消息
     */
    public UnauthorizedException(String message) {
        super(message);
    }

    /**
     * 使用自定义错误消息和原因构造异常
     * @param message 自定义错误消息
     * @param cause 原始异常
     */
    public UnauthorizedException(String message, Throwable cause) {
        super(message, cause);
    }

    /**
     * 使用原因构造异常
     * @param cause 原始异常
     */
    public UnauthorizedException(Throwable cause) {
        super(cause);
    }

    /**
     * 使用错误消息、原因、是否启用抑制和是否可写堆栈跟踪构造异常
     */
    protected UnauthorizedException(String message, Throwable cause,
                                    boolean enableSuppression,
                                    boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}